package com.chushouya.manager.dto.admin.oss;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;

/**
 * OSS 上传回调参数 DTO
 * 
 * @author chushouya
 * @date 2025-08-13
 */
@Data
@ApiModel("OSS上传回调参数")
public class OssCallbackDTO {

    @ApiModelProperty("文件名（包含路径）")
    @NotBlank(message = "文件名不能为空")
    private String filename;

    @ApiModelProperty("文件大小（字节）")
    private String size;

    @ApiModelProperty("文件MIME类型")
    private String mimeType;

    @ApiModelProperty("图片高度（仅图片文件）")
    private String height;

    @ApiModelProperty("图片宽度（仅图片文件）")
    private String width;

    @ApiModelProperty("图片格式（仅图片文件）")
    private String format;

    /**
     * 获取文件大小（长整型）
     */
    public Long getSizeAsLong() {
        try {
            return size != null ? Long.parseLong(size) : 0L;
        } catch (NumberFormatException e) {
            return 0L;
        }
    }

    /**
     * 获取图片宽度（整型）
     */
    public Integer getWidthAsInteger() {
        try {
            return width != null ? Integer.parseInt(width) : null;
        } catch (NumberFormatException e) {
            return null;
        }
    }

    /**
     * 获取图片高度（整型）
     */
    public Integer getHeightAsInteger() {
        try {
            return height != null ? Integer.parseInt(height) : null;
        } catch (NumberFormatException e) {
            return null;
        }
    }

    /**
     * 判断是否为图片文件
     */
    public boolean isImage() {
        return mimeType != null && mimeType.startsWith("image/");
    }

    /**
     * 获取解码后的文件名
     */
    public String getDecodedFilename() {
        try {
            return filename != null ? java.net.URLDecoder.decode(filename, "UTF-8") : null;
        } catch (Exception e) {
            return filename;
        }
    }

    /**
     * 获取实际文件名（不包含路径）
     */
    public String getActualFilename() {
        String decodedFilename = getDecodedFilename();
        if (decodedFilename == null) {
            return null;
        }
        String[] pathParts = decodedFilename.split("/");
        return pathParts[pathParts.length - 1];
    }

    /**
     * 获取文件目录路径
     */
    public String getDirectoryPath() {
        String decodedFilename = getDecodedFilename();
        if (decodedFilename == null || !decodedFilename.contains("/")) {
            return null;
        }
        return decodedFilename.substring(0, decodedFilename.lastIndexOf("/"));
    }
}
